package com.slidingmenu.lib.app;
import android.app.Activity;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import com.slidingmenu.lib.R;
import com.slidingmenu.lib.SlidingMenu;
public class SlidingActivityHelper {
private Activity mActivity;
private SlidingMenu mSlidingMenu;
private View mViewAbove;
private View mViewBehindLeft;
private View mViewBehindRight;
private boolean mBroadcasting = false;
private boolean mOnPostCreateCalled = false;
private boolean mEnableSlide = true;
private boolean mUseCustomUp = false;
public SlidingActivityHelper(Activity activity) {
mActivity = activity;
}
public void onCreate(Bundle savedInstanceState) {
mSlidingMenu = (SlidingMenu) LayoutInflater.from(mActivity).inflate(R.layout.slidingmenumain, null);
// mActivity.getTheme().applyStyle(R.style.CustomUp, true);
}
public void onPostCreate(Bundle savedInstanceState) {
if ((mViewBehindLeft == null && mViewBehindRight == null) || mViewAbove == null) {
throw new IllegalStateException("Both setBehind[Left|Right]ContentView must be called " +
"in onCreate in addition to setContentView.");
}
if (mViewBehindLeft == null)
mSlidingMenu.setViewBehind(null, SlidingMenu.LEFT);
if (mViewBehindRight == null)
mSlidingMenu.setViewBehind(null, SlidingMenu.RIGHT);
mOnPostCreateCalled = true;
// get the window background
TypedArray a = mActivity.getTheme().obtainStyledAttributes(new int[] {android.R.attr.windowBackground});
int background = a.getResourceId(0, 0);
if (mEnableSlide) {
// move everything into the SlidingMenu
ViewGroup decor = (ViewGroup) mActivity.getWindow().getDecorView();
ViewGroup decorChild = (ViewGroup) decor.getChildAt(0);
// save ActionBar themes that have transparent assets
decorChild.setBackgroundResource(background);
decor.removeView(decorChild);
mSlidingMenu.setContent(decorChild);
decor.addView(mSlidingMenu);
} else {
// take the above view out of
ViewGroup parent = (ViewGroup) mViewAbove.getParent();
if (parent != null) {
parent.removeView(mViewAbove);
}
// save people from having transparent backgrounds
if (mViewAbove.getBackground() == null) {
mViewAbove.setBackgroundResource(background);
}
mSlidingMenu.setContent(mViewAbove);
parent.addView(mSlidingMenu, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
}
}
public void setSlidingActionBarEnabled(boolean b) {
if (mOnPostCreateCalled)
throw new IllegalStateException("enableSlidingActionBar must be called in onCreate.");
mEnableSlide = b;
}
public void useCustomUpIndicator() {
if (mOnPostCreateCalled)
throw new IllegalStateException("useCustomUpIndicator must be called in onCreate.");
mUseCustomUp = true;
}
public View findViewById(int id) {
View v;
if (mSlidingMenu != null) {
v = mSlidingMenu.findViewById(id);
if (v != null)
return v;
}
return null;
}
public void registerAboveContentView(View v, LayoutParams params) {
if (!mBroadcasting)
mViewAbove = v;
}
public void setContentView(View v) {
mBroadcasting = true;
mActivity.setContentView(v);
}
public void setBehindLeftContentView(View v) {
mViewBehindLeft = v;
mSlidingMenu.setViewBehind(mViewBehindLeft, SlidingMenu.LEFT);
}
public void setBehindRightContentView(View v) {
mViewBehindRight = v;
mSlidingMenu.setViewBehind(mViewBehindRight, SlidingMenu.RIGHT);
}
public SlidingMenu getSlidingMenu() {
return mSlidingMenu;
}
public void toggle(int side) {
if (mSlidingMenu.isBehindShowing()) {
showAbove();
} else {
showBehind(side);
}
}
public void showAbove() {
mSlidingMenu.showAbove();
}
public void showBehind(int side) {
mSlidingMenu.showBehind(side);
}
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && mSlidingMenu.isBehindShowing()) {
showAbove();
return true;
}
return false;
}
}